package com.zhiyu.service;

import com.zhiyu.entity.DO.PermissionDO;
import com.zhiyu.entity.DO.UserDO;
import com.zhiyu.entity.VO.ResponseVO;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public interface UserService {

    /**
     * 为accountId指定的账号关联一个用户
     * @param accountId 账号id
     * @throws Exception
     */
    public UserDO addNewUser(int accountId) throws Exception;

    /**
     * 根据id查找用户信息
     * @param id 用户id
     * @return 用户信息对象
     */
    public UserDO findById(int id);

    /**
     * 检查用户id是否存在
     * @param id 用户id
     * @return 存在返回true，不存在返回false
     */
    public boolean checkUser(int id);

    /**
     * 根据账号id查找用户信息
     * @param accountId 账号id
     * @return 用户信息对象
     */
    public UserDO findByAccountId(int accountId);

    /**
     * 查找指定id的用户所属于的角色
     * @param id 用户id
     * @return 包含用户所属于的所有角色的列表
     */
    public List<String> findRoles(int id);

    /**
     * 查找指定id1的用户所拥有的权限
     * @param id 用户id
     * @return 包含用户所拥有的权限的列表
     */
    public List<PermissionDO> findPermissions(int id);

    /**
     * 获取指定用户的个人信息
     * @param myId 传入-1表示该字段无效
     * @param userId 用户id
     * @return
     */
    public ResponseVO getUserInformation(int myId, int userId);

    /**
     * 修改指定用户的个人信息
     * @param userId 用户id
     * @param field 修改字段
     * @param value 修改值
     * @return
     */
    public ResponseVO updateUserInformation(int userId, String field, String value);

    /**
     * 关注用户
     * @param myId 关注者的id
     * @param userId 被关注者的id
     * @return
     */
    public ResponseVO follow(int myId, int userId);

    /**
     * 取消关注
     * @param myId 关注者的id
     * @param userId 被关注者的id
     * @return
     */
    public ResponseVO unfollow(int myId, int userId);

    /**
     * 获取用户的粉丝数
     * @param myId 主体用户id，传入-1表示该字段无效
     * @param userId 用户id
     * @param offset 粉丝索引的偏移量，即从第offset个粉丝开始查找
     * @param limit 限定返回的粉丝数
     * @return
     */
    public ResponseVO getFollowers(int myId, int userId, int offset, int limit);

    /**
     * 获取用户的关注数
     * @param myId 主体用户id，传入-1表示该字段无效
     * @param userId 用户id
     * @param offset 被关注者索引的偏移量，即从第offset个被关注者开始查找
     * @param limit 限定返回的被关注者的数量
     * @return
     */
    public ResponseVO getFollowings(int myId, int userId, int offset, int limit);
}
